<?php

/**
 * mesure actions.
 *
 * @package    appcemhti
 * @subpackage mesure
 * @author     Steve Cancès
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class mesureActions extends sfActions
{
    
    protected function droitLecture()
    {
        $droitUtilisateur = $this->lot->idDroitSurLot($this->getUser()->getGuardUser()->getId());
        $this->forwardUnless($droitUtilisateur == 3 || $droitUtilisateur == 2, 'sfGuardAuth', 'secure');
    }
    
    protected function droitEcriture()
    {
        $droitUtilisateur = $this->lot->idDroitSurLot($this->getUser()->getGuardUser()->getId());
        $this->forwardUnless($droitUtilisateur == 3, 'sfGuardAuth', 'secure');
    }

    public function executeShow(sfWebRequest $request)
    {
        $this->forward404Unless($this->mesure = Doctrine_Core::getTable('mesure')->find(array($request->getParameter('id_mesure'))));
        if($this->mesure->getIdTraitement() != null) $this->traitement = Doctrine_Core::getTable('traitement')->find(array($this->mesure->getIdTraitement()));
        
        $this->lot = $this->mesure->getEchantillon()->getLot();
        // On vérifie que l'utilisateur a les droits de lecture sur le lot concerné
        $this->droitLecture();
        
        $this->nbCommentaireSurMesure = $this->mesure->getCommentaire()->count();
        $this->nbCommentaireSurEchantillon = $this->mesure->getEchantillon()->getCommentaire()->count();
        $this->nbCommentaireSurLot = $this->lot->getCommentaire()->count();
        
        $this->typesTraitement = Doctrine_Core::getTable('typeTraitement')->findAll();
    }

    public function executeNew(sfWebRequest $request)
    {
        $this->forward404Unless($this->echantillon = Doctrine_Core::getTable('echantillon')->find(array($request->getParameter('id_echantillon'))), sprintf('Object echantillon does not exist (%s).', $request->getParameter('id_echantillon')));
        
        $this->lot = $this->echantillon->getLot();
        // On vérifie que l'utilisateur a les droits d'écriture sur le lot concerné
        $this->droitEcriture();
        
        $this->form = new mesureForm();
    }

    public function executeCreate(sfWebRequest $request)
    {
        $this->forward404Unless($request->isMethod(sfRequest::POST));
        $this->forward404Unless($this->echantillon = Doctrine_Core::getTable('echantillon')->find(array($request->getParameter('id_echantillon'))), sprintf('Object echantillon does not exist (%s).', $request->getParameter('id_echantillon')));

        $this->lot = $this->echantillon->getLot();
        // On vérifie que l'utilisateur a les droits d'écriture sur le lot concerné
        $this->droitEcriture();
        
        $this->form = new mesureForm();
        
        $params = $request->getParameter($this->form->getName());
        $params['id_echantillon'] = $this->echantillon->getIdEchantillon();
        $request->setParameter($this->form->getName(), $params);

        $this->processForm($request, $this->form);

        $this->setTemplate('new');
    }

    public function executeEdit(sfWebRequest $request)
    {
        $this->forward404Unless($this->mesure = Doctrine_Core::getTable('mesure')->find(array($request->getParameter('id_mesure'))), sprintf('Object mesure does not exist (%s).', $request->getParameter('id_mesure')));
        $this->echantillon = $this->mesure->getEchantillon();
        
        $this->lot = $this->echantillon->getLot();
        // On vérifie que l'utilisateur a les droits d'écriture sur le lot concerné
        $this->droitEcriture();
        
        $this->form = new mesureForm($this->mesure);
    }

    public function executeUpdate(sfWebRequest $request)
    {
        $this->forward404Unless($request->isMethod(sfRequest::POST) || $request->isMethod(sfRequest::PUT));
        $this->forward404Unless($this->mesure = Doctrine_Core::getTable('mesure')->find(array($request->getParameter('id_mesure'))), sprintf('Object mesure does not exist (%s).', $request->getParameter('id_mesure')));
        $this->echantillon = $this->mesure->getEchantillon();
        
        $this->lot = $this->echantillon->getLot();
        // On vérifie que l'utilisateur a les droits d'écriture sur le lot concerné
        $this->droitEcriture();
        
        $this->form = new mesureForm($this->mesure);

        $this->processForm($request, $this->form);

        $this->setTemplate('edit');
    }

//  public function executeDelete(sfWebRequest $request)
//  {
//    $request->checkCSRFProtection();
//
//    $this->forward404Unless($mesure = Doctrine_Core::getTable('mesure')->find(array($request->getParameter('id_mesure'))), sprintf('Object mesure does not exist (%s).', $request->getParameter('id_mesure')));
//    $mesure->delete();
//
//    $this->redirect('mesure/index');
//  }

    protected function processForm(sfWebRequest $request, sfForm $form)
    {
        $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
        if ($form->isValid())
        {
            if($form->getObject()->isNew()) $new = true; else $new = false;
            
            $mesure = $form->save();
            if($new == true)
            {
                $mesure->setCreatedAt(date('Y-m-d H:i:s', time()));
            }
            $mesure->setUpdatedAt(date('Y-m-d H:i:s', time()));
            if($mesure->getIdTraitement())
            {
                $traitement = $mesure->getTraitement();
                $traitement= $traitement[0];
                $traitement->setDateDebutTraitement($mesure->getDateMesure());
            }
            $mesure->save();

            $this->redirect('mesure/show?id_mesure='.$mesure->getIdMesure());
        }
    }
    
    public function executeGererParametres(sfWebRequest $request)
    {
        $this->forward404Unless($this->mesure = Doctrine_Core::getTable('mesure')->find(array($request->getParameter('id_mesure'))), sprintf('Object mesure does not exist (%s).', $request->getParameter('id_mesure')));
        $this->echantillon = $this->mesure->getEchantillon();
        
        $this->lot = $this->echantillon->getLot();
        // On vérifie que l'utilisateur a les droits d'écriture sur le lot concerné
        $this->droitEcriture();
        
        $this->form = new MesureExploreParametreForm();
    }
    
    //AJAX
    
    public function executeMAJParametres(sfWebRequest $request)
    {
        //if ($request->isXmlHttpRequest())
        //{
            $idMesure= intval($request->getParameter("idMesure"));
            $this->forward404Unless($this->mesure = Doctrine_Core::getTable('Mesure')->find(array($idMesure)), sprintf('Object mesure does not exist (%s).', $idMesure));
            $this->echantillon = $this->mesure->getEchantillon();
            
            $this->lot = $this->echantillon->getLot();
            // On vérifie que l'utilisateur a les droits de lecture sur le lot concerné
            $this->droitLecture();
            
            sfConfig::set('sf_web_debug', false);
            $this->getContext()->getConfiguration()->loadHelpers('Partial');
            
            //return $this->renderText(get_partial('listeParametresExplores', array('mesure' => $this->mesure)));
            return $this->renderPartial('listeParametresExplores', array('mesure' => $this->mesure));
        //}
    }
    
    public function executeAjouterParametre(sfWebRequest $request)
    {
        //if ($request->isXmlHttpRequest())
        //{
            $idParam= intval($request->getParameter("idParam"));
            $this->forward404Unless($this->parametreExplore = Doctrine_Core::getTable('ParametreExplore')->find(array($idParam)), sprintf('Object parametreExplore does not exist (%s).', $idParam));
            $idMesure= intval($request->getParameter("idMesure"));
            $this->forward404Unless($this->mesure = Doctrine_Core::getTable('Mesure')->find(array($idMesure)), sprintf('Object mesure does not exist (%s).', $idMesure));
            $this->echantillon = $this->mesure->getEchantillon();
            
            $this->lot = $this->echantillon->getLot();
            // On vérifie que l'utilisateur a les droits d'écriture sur le lot concerné
            $this->droitEcriture();
            
            //On vérifie que le parametre n'est pas déja associé a la mesure
            $existe = false;
            foreach ($this->mesure->getMesureExploreParametre() as $mesureExploreParametre)
            {

                if($mesureExploreParametre->getIdParametreExplore() == $idParam)
                {
                    $existe = true;
                    break;
                }
            }
            //Si il n'existe pas on le créer
            if(!$existe)
            {
                $newParametre = new MesureExploreParametre();
                $newParametre->setIdMesure($this->mesure->getIdMesure());
                $newParametre->setIdParametreExplore($idParam);
                $newParametre->save();
            }
            return true;
        //}
    }
    
    public function executeSupprimerParametre(sfWebRequest $request)
    {
        //if ($request->isXmlHttpRequest())
        //{
            $idParam= intval($request->getParameter("idParam"));
            $this->forward404Unless($this->parametreExplore = Doctrine_Core::getTable('ParametreExplore')->find(array($idParam)), sprintf('Object parametreExplore does not exist (%s).', $idParam));
            $idMesure= intval($request->getParameter("idMesure"));
            $this->forward404Unless($this->mesure = Doctrine_Core::getTable('Mesure')->find(array($idMesure)), sprintf('Object mesure does not exist (%s).', $idMesure));
            $this->echantillon = $this->mesure->getEchantillon();
            
            $this->lot = $this->echantillon->getLot();
            // On vérifie que l'utilisateur a les droits d'écriture sur le lot concerné
            $this->droitEcriture();
            
            //On vérifie que le parametre n'est ppas déja associé a la mesure
            foreach ($this->mesure->getMesureExploreParametre() as $mesureExploreParametre)
            {
                echo $mesureExploreParametre->getIdParametreExplore()." == ".$idParam;
                if($mesureExploreParametre->getIdParametreExplore() == $idParam)
                {
                    $mesureExploreParametre->delete();
                    break;
                }
            }
            return true;
        //}
    }
    
//    public function executeCreateParametre(sfWebRequest $request)
//    {
//        //On vérifie que la mesure existe
//        $this->forward404Unless($this->mesure = Doctrine_Core::getTable('mesure')->find(array($request->getParameter('id_mesure'))), sprintf('Object mesure does not exist (%s).', $request->getParameter('id_mesure')));
//        $this->echantillon = $this->mesure->getEchantillon();
//        
//        $this->lot = $this->echantillon->getLot();
//        // On vérifie que l'utilisateur a les droits d'écriture sur le lot concerné
//        $this->droitEcriture();
//        
//        $this->form = new MesureExploreParametreForm();
//        
//        $params = $request->getParameter($this->form->getName());
//        $this->idParam = $params['id_parametre_explore'];
//        //On vérifie que le parametre existe
//        //$this->forward404Unless($this->parametreExplore = Doctrine_Core::getTable('ParametreExplore')->find(array($params['id_parametre_explore'])), sprintf('Object parametreExplore does not exist (%s).', $params['id_parametre_explore']));
//        //On vérifie que le parametre n'est ppas déja associé a la mesure
//        $existe = false;
//        foreach ($this->mesure->getMesureExploreParametre() as $mesureExploreParametre)
//        {
//            
//            if($mesureExploreParametre->getIdParametreExplore() == $this->idParam)
//            {
//                $existe = true;
//                break;
//            }
//        }
//        //Si il n'existe pas on le créer
//        if(!$existe)
//        {
//            $newParametre = new MesureExploreParametre();
//            $newParametre->setIdMesure($this->mesure->getIdMesure());
//            $newParametre->setIdParametreExplore($this->idParam);
//            $newParametre->save();
//            
//        }
//        $this->redirect('mesure/show?id_mesure='.$mesure->getIdMesure());
//    }
}
